--
-- 2024-8-26
--
local RxTime = {}

-- 年月日
-- return y,m,d
function RxTime:ymd()
  local t = os.time()
  local y = tonumber(os.date('%Y', t))
  local m = tonumber(os.date('%m', t))
  local d = tonumber(os.date('%d', t))
  RxLog('RxTime:ymd year =' ..tostring(y) .. ' month='..tostring(m) .. ' day='.. tostring(d))
  return y, m, d
end

-- 周： 0 周日，1 周一 ...
--- return  0/1/2//3/4/5/6
function RxTime:week()
  local t = os.time()
  local w = tonumber(os.date('%w',  t))
  RxLog('RxTime:week =' .. tostring(w))
  return w
end

-- 获取 {小时，分钟}
-- return {小时，分钟}
function RxTime:shortTime()
  local t = os.time()
  local h = tonumber(os.date('%H', t))
  local m = tonumber(os.date('%M', t))
  RxLog('RxTime:shortTime hour ='.. tostring(h) .. ' minute =' .. tostring(m))
  return h, m
end

-- 时间: 根据<时间戳> 返回: 年月日时分秒
function RxTime:dateWithInterval(interval)
  if not interval then
    return nil
  end

  if string.len(tostring(interval)) == 13 then
    interval = interval / 1000
  end

  local d = os.date('*t', interval)
  return d
end

-- 时间: 获取当前时间: `2024-01-10`
function RxTime:dataString(splitChar)
  splitChar = splitChar or '-'
  local rule = '%Y'..tostring(splitChar)..'%m'..tostring(splitChar)..'%d'
  local ct = os.date(rule, os.time()) -- 日期
  return ct
end

-- 时间：获取 当前时间的，`年月日 时分秒`， `2024-01-10-01-01-01`
function RxTime:dataAllString(splitChar)
  splitChar = splitChar or '-'
  local timestamp = os.time() -- 日期
  return RxTime:dateInterToString(timestamp, splitChar)
end

-- 时间： 时间戳 格式化: 分隔符自定义: `2024-01-10-01-01-01`
function RxTime:dateInterToString(timestamp, spaceSplit, dateSplit, timeSplit)
  timestamp = timestamp or os.time()
  spaceSplit = spaceSplit or '_'
  dateSplit = dateSplit or '-'
  timeSplit = timeSplit or ':'

  if string.len(tostring(timestamp)) == 13 then
    timestamp = timestamp / 1000
  end

  local rule = '%Y'..tostring(dateSplit)..'%m'..tostring(dateSplit)..'%d'..tostring(spaceSplit)..'%H'..tostring(timeSplit)..'%M'..tostring(timeSplit)..'%S'
  local ct = os.date(rule, timestamp) -- 日期
  return ct
end

-- 时间： 字符串 转 时间戳  `2024-01-04 01:02:03` => 1802222
function RxTime:dateWithString(dateString)
  local pattern = '(%d+)-(%d+)-(%d+)%s*(%d+):(%d+):(%d+)'
  local a, b, year,month,day,h,m,s = string.find(dateString, pattern)
  RxLog('RxTime:dateWithString a='..tostring(a))
  RxLog('RxTime:dateWithString b='..tostring(b))
  RxLog('RxTime:dateWithString year='..tostring(year))
  RxLog('RxTime:dateWithString month='..tostring(month))
  RxLog('RxTime:dateWithString day='..tostring(day))
  RxLog('RxTime:dateWithString hour='..tostring(h))
  RxLog('RxTime:dateWithString min='..tostring(m))
  RxLog('RxTime:dateWithString sec='..tostring(s))
  return os.time({
    year = year,
    month = month,
    day = day,
    hour = h,
    min = m,
    sec = s
  })
end

-- 时间比较
----------- 2024-01-01 01:01:03
-- -1  in1 < in2
--- 0 相等
--- 1 in1 > in2
------------  -1/1 年，-2/2 月  -3/3日 -4/4时，-5/-5分 -6/6秒
function RxTime:diffTimeInterval(inter1, inter2)
  local date1Tab = RxTime:dateWithInterval(inter1)
  if not date1Tab then return - 7 end

  local date2Tab = RxTime:dateWithInterval(inter2)
  if not date2Tab then return 7 end

  -- 年
  local y1 = date1Tab.year or 0
  local y2 = date1Tab.year or 0
  if y1 < y2 then
    return -1
  elseif y1 > y2 then
    return 1
  end

  -- 月
  local m1 = date1Tab.month or 0
  local m2 = date2Tab.month or 0
  if m1 < m2 then
    return -2
  elseif m1 > date2Tab.month then
    return 2
  end

  -- 日
  local d1 = date1Tab.day or 0
  local d2 = date2Tab.day or 0
  if d1 < d2 then
    return -3
  elseif d1 > d2 then
    return 3
  end

  -- 时
  local hh1 = date1Tab.hour
  local hh2 = date2Tab.hour
  if hh1 < hh2 then
    return -4
  elseif hh1 > hh2 then
    return 4
  end

  -- 分
  local mm1 = date1Tab.min or 0
  local mm2 = date2Tab.min or 0
  if mm1 < mm2 then
    return -5
  elseif mm1 > mm2 then
    return 5
  end

  -- 秒
  local ss1 = date1Tab.sec or 0
  local ss2 = date2Tab.sec or 0
  if ss1 < ss2 then
    return -6
  elseif ss1 > ss2 then
    return 6
  end

  return 0
end

return RxTime